package hoja_uno.otros_grupos;

/**
 * @autor   Benito Maza
 */

import hoja_uno.Radio;

public class RadioA implements Radio
{

    //Atributos
    private boolean estado;
    private boolean FM;
    private float frecuencia;
    private float[] lista_Estaciones_AM;
    private float[] lista_Estaciones_FM;
    
    
    //Constructor
   public RadioA(){
       
       lista_Estaciones_AM = new float [12];
       lista_Estaciones_FM = new float [12];
       estado = false;
       FM = false;
       frecuencia = AM_MIN;
       for (int i=0;i<=11;i++)
       {
           lista_Estaciones_AM[i] = AM_MIN;
           lista_Estaciones_FM[i] = FM_MIN;
       }
       
   }         
    //Metodos
   
    @Override
   public void onOff ()
    {
        estado=!estado;
    }
   
    @Override
   public void cambiarBanda()
    {
        if(FM)
            frecuencia=AM_MIN;
        else
            frecuencia=FM_MIN;
        FM=!FM;
    }
   
    @Override
   public void cambiarFrecuencia () 
    {
       if(FM)
            if(frecuencia==FM_MAX)
                frecuencia=FM_MIN;
            else
                frecuencia+=FM_D;
        else
            if(frecuencia==AM_MAX)
                frecuencia=AM_MIN;
            else
                frecuencia+=AM_D;
        
    }
    /**
     * Se resta la frecuencia en lugar de sumarla
     * @param restar 
     */
    public void cambiarFrecuencia(float restar)
    {
        if(FM)
            if(frecuencia==FM_MIN)
                frecuencia=FM_MAX;
            else
                frecuencia+=(restar*FM_D);
        else
            if(frecuencia==AM_MIN)
                frecuencia=AM_MAX;
            else
                frecuencia+=(restar*AM_D);
            
    }
    
    @Override
   public void guardarEstacion(int boton)
    {
       
       if (FM)
       {
           
            lista_Estaciones_FM[boton] = frecuencia; 
        
           
       } 
       else
       {
           
           lista_Estaciones_AM[boton] = frecuencia;
           
       }
        
   }
   
    @Override
   public void seleccionarEstacion(int boton){
       
       if (FM){
           
           frecuencia = lista_Estaciones_FM[boton];
           
       }else{
           
           frecuencia = lista_Estaciones_AM[boton];
           
       }
      
   }
    /**
     * Redondea la frecuencia para arreglar la imprecisión de las operaciones
     * de punto flotante
     * @param frecuencia
     * @return frecuencia redondeada
     */
    private double Round(float frecuencia) 
    {
        double result = frecuencia * 100;
        result = Math.round(result);
        result = result / 100;
        return result;

    }
    
    @Override
    public float getFrecuencia() 
    {
        return (float) Round(frecuencia);
    }

    @Override
    public boolean isOn() 
    {
        if(estado)
            return true;
        else
            return false;
    }

    @Override
    public boolean isAM() 
    {
        if(FM)
            return false;
        else
            return true;
    }

    @Override
    public boolean isFM() 
    {
        if(FM)
            return true;
        else
            return false;
    }
}
